home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 4 / PC World Interactive 4.iso / online / appbar.EXE / cppsrc / Misc.cpp < prev    next >
C/C++ Source or Header  |  1996-08-31  |  6KB  |  229 lines

  1. // Non-C++ code
  2.  
  3. #include "appbar.h"
  4. #include "globals.h"
  5.  
  6. void killmenu(menu_struct *menu)
  7. {
  8.     app_struct *app, *front;
  9.  
  10.     if (!menu)                  // Null menu
  11.         return;
  12.     app = menu->nextapp;
  13.     if  (!app) {                // Menu w/o applications (?)
  14.         delete menu;
  15.         return;
  16.     }
  17.     front = app->nextapp;
  18.     while (front!=NULL) {
  19.         delete app;
  20.         app = front;
  21.         front = front->nextapp;
  22.     }
  23.     delete app;
  24.     delete menu;
  25. }
  26.  
  27. // Updates app linked list and deletes app node
  28. // DOES NOT update menu->nextapp (calling code should)
  29.  
  30. void killapp(app_struct * app)
  31. {
  32.     if (!app)
  33.         return;
  34.     delete app;
  35. }
  36.  
  37. // Finds menu by name in list
  38.  
  39. menu_struct * find_menu(char * menu_sel)
  40. {
  41.     menu_struct * menu;
  42.  
  43.     for (menu = glob_menu; menu != NULL; menu = menu->nextmenu)
  44.         if (!strcmp(menu->menuname,menu_sel))
  45.             return menu;
  46.     ab_message(ERROR_FINDING_MENU, ab.abwin->GetSafeHwnd());   
  47.     return NULL;
  48. }
  49.  
  50. app_struct * find_app(app_struct * apps, char * app_sel)
  51. {
  52.     app_struct * app;
  53.  
  54.     if (!strcmp(app_sel, SEPARATOR_STRING))
  55.         return NULL;
  56.     for (app = apps; app != NULL; app = app->nextapp)
  57.         if (!strcmp(app_sel,app->appname))
  58.             return app;
  59.     ab_message(ERROR_FINDING_APP, ab.abwin->GetSafeHwnd());
  60.     return NULL;
  61. }
  62.  
  63. //////////////////////////////////////////////////
  64. // Print error message and exit program
  65.  
  66. void error(char *err_msg)
  67. {
  68.     ::MessageBox(NULL, err_msg, FATAL_ERROR, MB_OK | MB_ICONSTOP);
  69.     _fcloseall();
  70.     ab.ExitAppBar(TRUE);
  71. }
  72.  
  73. void DoBrowse(int type, CDialog* pParent)
  74.     OPENFILENAME ofn;
  75.     char szFile[80];
  76.     
  77.     strcpy(szFile,""); 
  78.  
  79.     ofn.lStructSize       = sizeof(OPENFILENAME); 
  80.     ofn.hwndOwner         = pParent->m_hWnd; 
  81.     ofn.hInstance         = NULL; 
  82.     ofn.lpstrFilter       = (type ? WAV_FILE_TYPES : EXE_FILE_TYPES); 
  83.     ofn.lpstrCustomFilter = NULL; 
  84.     ofn.nMaxCustFilter    = 0L; 
  85.     ofn.nFilterIndex      = 1L; 
  86.     ofn.lpstrFile         = szFile; 
  87.     ofn.nMaxFile          = sizeof(szFile); 
  88.     ofn.lpstrFileTitle    = NULL; 
  89.     ofn.nMaxFileTitle     = 0; 
  90.     ofn.lpstrInitialDir   = "C:\\"; 
  91.     ofn.lpstrTitle        = (type ? FIND_WAV : FIND_EXE); 
  92.     ofn.nFileOffset       = 0; 
  93.     ofn.nFileExtension    = 0; 
  94.     ofn.lpstrDefExt       = NULL; 
  95.     ofn.lCustData         = 0; 
  96.     ofn.Flags             = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST 
  97.                                          | OFN_HIDEREADONLY; 
  98.     if (GetOpenFileName(&ofn)) {
  99.         if (type)    // Wav file 
  100.             pParent->GetDlgItem(IDC_WAVNAME)->SendMessage(WM_SETTEXT, 0, (LPARAM)ofn.lpstrFile);
  101.           else        // Application executable
  102.             pParent->GetDlgItem(IDC_EXENAME)->SendMessage(WM_SETTEXT, 0, (LPARAM)ofn.lpstrFile);
  103.         pParent->GetDlgItem(IDOK)->SetFocus();
  104.     }
  105.  
  106.  
  107. // Returns app structure associated with a given menu ID
  108.  
  109. app_struct * find_appId(WPARAM menuId)
  110. {
  111.     app_list * temp;
  112.  
  113.     temp = applist;
  114.     while (temp->appId != (int)menuId) {
  115.         temp = temp->next;
  116.         if (temp == NULL)
  117.             return NULL;
  118.     }
  119.     return temp->app;
  120. }
  121.  
  122. BOOL switch_places_a(app_struct *app, int dir)
  123. {
  124.     if (!app)
  125.         return FALSE;
  126.     if (!(app->prevapp) && (dir == UP))
  127.         return FALSE;
  128.     if (!(app->nextapp) && (dir == DOWN))
  129.         return FALSE;
  130.     if (dir == UP) {            // Let's make a mess...
  131.         if (app->nextapp)
  132.             app->nextapp->prevapp = app->prevapp;
  133.         if (app->prevapp->prevapp)
  134.             app->prevapp->prevapp->nextapp = app;
  135.         app->prevapp->nextapp = app->nextapp;
  136.         app->nextapp = app->prevapp;
  137.         app->prevapp = app->prevapp->prevapp;
  138.         app->nextapp->prevapp = app;
  139.         return TRUE;
  140.       } else {
  141.         if (app->prevapp)
  142.             app->prevapp->nextapp = app->nextapp;
  143.         if (app->nextapp->nextapp)
  144.             app->nextapp->nextapp->prevapp = app;
  145.         app->nextapp->prevapp = app->prevapp;
  146.         app->prevapp = app->nextapp;
  147.         app->nextapp = app->nextapp->nextapp;
  148.         app->prevapp->nextapp = app;
  149.         return TRUE;
  150.     }
  151. }
  152.  
  153. BOOL switch_places_m(menu_struct *menu, int dir)
  154. {
  155.     if (!menu)
  156.         return FALSE;
  157.     if (!(menu->prevmenu) && (dir == UP))
  158.         return FALSE;
  159.     if (!(menu->nextmenu) && (dir == DOWN))
  160.         return FALSE;
  161.     if (dir == UP) {            // Let's make a mess...
  162.         if (menu->nextmenu)
  163.             menu->nextmenu->prevmenu = menu->prevmenu;
  164.         if (menu->prevmenu->prevmenu)
  165.             menu->prevmenu->prevmenu->nextmenu = menu;
  166.           else
  167.             glob_menu = menu;
  168.         menu->prevmenu->nextmenu = menu->nextmenu;
  169.         menu->nextmenu = menu->prevmenu;
  170.         menu->prevmenu = menu->prevmenu->prevmenu;
  171.         menu->nextmenu->prevmenu = menu;
  172.         return TRUE;
  173.       } else {
  174.         if (menu->prevmenu)
  175.             menu->prevmenu->nextmenu = menu->nextmenu;
  176.           else
  177.             glob_menu = menu->nextmenu;
  178.         if (menu->nextmenu->nextmenu)
  179.             menu->nextmenu->nextmenu->prevmenu = menu;
  180.         menu->nextmenu->prevmenu = menu->prevmenu;
  181.         menu->prevmenu = menu->nextmenu;
  182.         menu->nextmenu = menu->nextmenu->nextmenu;
  183.         menu->prevmenu->nextmenu = menu;
  184.         return TRUE;
  185.     }
  186. }
  187.  
  188. // Deletes menu list and frees resources
  189.  
  190. void kill_applist(void)
  191. {
  192.     app_list *curapplist;
  193.  
  194.     if (applist) {                  // Kill off old app list
  195.         curapplist = applist;
  196.         while (curapplist!=NULL) {
  197.             curapplist = applist->next;
  198.             delete applist;
  199.             applist = curapplist;
  200.         }
  201.     }
  202. }
  203.  
  204. // Release application linked list memory
  205.  
  206. void release_app_memory(void)
  207. {             
  208.     menu_struct *menu, *front;
  209.     
  210.     kill_applist();
  211.     menu = glob_menu;
  212.     if (!menu)
  213.         return;
  214.     front = menu->nextmenu;
  215.     while (front!=NULL) {            
  216.         killmenu(menu);
  217.         menu = front;
  218.         front = front->nextmenu;
  219.     }
  220.     killmenu(menu);
  221. }
  222.  
  223. void ab_message(char * msg, HWND parent)
  224. {
  225.     ::MessageBox(parent, msg, "AppBar", MB_OK | MB_ICONEXCLAMATION);
  226. }
  227.